<?php

namespace App\Http\Controllers\Home;
use Hash;
use Illuminate\Http\Request;
use DB;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Gregwar\Captcha\CaptchaBuilder;
use App\Http\Requests\UserInsertRequest;
use Mail;
use App\Http\Controllers\Admin\CateController;


class LoginController extends Controller
{
   /*
		显示注册页面
   */
	public function getRegist()
	{
		$cates = CateController::getCatesByPid(0);
		return view('home.login.regist',['cates'=>$cates]);
	}

	// 显示登录页面
	public function getLogin()
	{
		// echo '登录 ';
		return view('home.login.login');

	}

	// 执行登录
	public function postInsert(Request $request)
	{
		// dd($request->all());
		// 提取用户名
		$name = $request->input('username');
		// 根据用户名查询用户
		$user = DB::table('user')->where('username',$name)->first();
		// dd($user);
		// 判断用户是否存在
		if(empty($user)){
			return back()->with('error','用户名或密码不正确');
		}
		// dd($user);
		$res = Hash::check($request->input('password'), $user->password);
   		// dd($res);
   		if($res){
   			// 将用户信息存入session
   			session(['uid'=>$user->id]);
   			session(['uname'=>$user->username]);

   			// 登陆成功
   			return redirect('/')->with('success','欢迎'.$user->username.'登录');
   		}else{
   			// 登录失败
   			return back()->with('error','用户名或密码不正确');
   		}
   	}

   	// 退出
   	public function getQuit(Request $request)
   	{
   		$request->session()->flush();
   		return redirect('/')->with('success','已退出登录');
   	}

   	// 找回密码
   	public function postUpdate(Request $request)
	{
		// dd($request->all());
		// 提取用户名
		$email = $request->input('email');
		// 根据emaiil查询用户

		$user = DB::table('user')->where('email',$email)->first();
		// dd($user);
		// 判断用户是否存在
		if(empty($user)){
			return back()->with('error','邮箱不存在');
		}else{
			// 发生送邮件
			$this->findMail($user->id,$user->token,$user->email);
			$cates = CateController::getCatesByPid(0);
			return view('home.login.suces',['user'=>$user,'cates'=>$cates]);
		}
		
   	}





	//执行注册
	public function postDoregist(UserInsertRequest $request)
	{


		// 检测验证码是否正确
		if($request->input('vcode') != session('Vcode')){
			return back()->with('error','验证码错误');
		}

		// 检测邮箱是否唯一
		$email = $request->input('email');
		// 通过email查询用户
		$reemail = DB::table('user')->where('email',$email)->get();
		// 判断输入的邮箱是否存在
		if(!empty($reemail)){
			return back()->with('error','邮箱已使用注册,请更换邮箱,若忘记密码,通过邮箱验证找回密码');
		}


		// 处理数据
		$data = $request->only(['username','password','email','phone']);
		// dd($data);
		$data['password'] = Hash::make($data['password']);
		$data['token'] = str_random(50);
		
		// 插入数据 获取id
		$id = DB::table('user')->insertGetId($data);

		$user = DB::table('user')->where('username',$data['username'])->first();
		if($id){
			// 发送邮件
		
			$this->sendMail($id,$data['token'],$data['email']);
			$cates = CateController::getCatesByPid(0);
			// 注册成功
			return view('home.login.success',['user'=>$user,'cates'=>$cates]);
		}else{
			// 注册失败
			return back()->with('error','注册失败');
		}


		// dd($request->all());
	}




	public function Vcode()
	{

		 ob_clean();//清除输出缓存区的内容
    //生成验证码图片的Builder对象，配置相应属性
    $builder = new CaptchaBuilder;
    //可以设置图片宽高及字体
    $builder->build($width = 100, $height = 40, $font = null);
    //获取验证码的内容
    $phrase = $builder->getPhrase();

    //把内容存入session
    session(['Vcode'=>$phrase]);
    //生成图片
    header("Cache-Control: no-cache, must-revalidate");
    header('Content-Type: image/jpeg');
    $builder->output();

	}


	// 发送邮件的方法
	public function sendMail($id,$token,$email)
	{

		// Mail::raw('狗蛋网欢迎你注册请点击.即可获取大量资源...', function ($message) {
		//     //设置邮件标题
		//     $message->subject('激活邮件');
		//     //发送给谁
		//     $message->to('1263904718@qq.com');
		// });
	
		// $id = 10;
		// $token = 'eqweadsasdqwdsad';
		// $email = '1263904718@qq.com';

		Mail::send('home.email.index', ['id'=>$id,'token'=>$token], function ($message)use($email) {
        	$message->to($email)->subject('激活邮件');
    	});

    	
	 }



	 // 发送找回密码邮件
	 public function findMail($id,$token,$email)
	{

		
		Mail::send('home.email.update', ['id'=>$id,'token'=>$token], function ($message)use($email) {
        	$message->to($email)->subject('修改密码');
    	});

    	
	 }


	 //找回密码
	 public function find(Request $request)
	 {
	 	$id = $request->input('id');

	 	// 查询用户
	 	$user = DB::table('user')->where('id',$id)->first();
	 	// dd($user);
	 	return view('home.login.find',['user'=>$user]);

	 }

	 // 设置新密码
	 public function postSetup(Request $request)
	 {
	 	// dd($request->all());
	 	// 获取新密码
	 	$data = $request->only(['password']);
	 	$data['password'] = Hash::make($data['password']);

	 	$id = $request->input('id');
	 	// 设置新的密码存入数据库
	 	$res = DB::table('user')->where('id',$id)->update($data);

	 	if($res){
	 		return redirect('Home/login')->with('success','新密码设置成功，请登录');
	 	}else{
	 		return back()->with('error','新密码设置失败，请重新设置');
	 	}
	 }




	// 激活用户
	public function jihuo(Request $request)
	{
		$id = $request->input('id');

		// 查询用户
	 	$user = DB::table('user')->where('id',$id)->first();
	 	if(empty($user)){
	 		return '链接失效，为查询到该用户';
	 	}

	 	if($request->input('token') != $user->token){
	 		return '链接失效，非法请求';
	 	}

	 	// 修改状态，并重置token
	 	$data = [
	 		'status'=>1,
	 		'token'=>str_random(50)
	 	];

	 	$res = DB::table('user')->where('id',$id)->update($data);
	 	if($res){
	 		return redirect('/')->with('success','激活成功');
	 	}else{
	 		return redirect('/')->with('error','激活失败');
	 	}

	}




}
